/**
 * 链接：https://www.nowcoder.com/questionTerminal/1277c681251b4372bdef344468e4f26e
 *
 * 将一个字符串转换成一个整数，要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
 * 数据范围：字符串长度满足 0≤n≤100
 * 进阶：空间复杂度 O(1) \O(1)  ，时间复杂度 O(n) \O(n)
 * 注意：
 * ①字符串中可能出现任意符号，出现除 +/- 以外符号时直接输出 0
 * ②字符串中可能出现 +/- 且仅可能出现在字符串首位。
 *
 * 输入 "+2147483647"   "12a1"
 * 输出 2147483647        0
 */
public class Solution {
    public static int StrToInt(String str) {
        int length = str.length();
        if(str == null || length == 0) {
            return 0;
        }

        int result = 0;
        if(str.charAt(0) > '0' && str.charAt(0) <= '9')
            result += (str.charAt(0) - '0');
        result *= 10;

        int i = 1;
        while(i < length) {
            char ch = str.charAt(i);
            if(ch < '0' || ch > '9') {
                result = 0;
                break;
            }
            int tmp = (ch - '0');
            result += tmp;
            if(i < length-1)
                result *= 10;
            i++;
        }

        if(i == length && str.charAt(0) == '-')
            result = -result;

        return result;
    }

    /**
     *  题解
     */
    public int StrToInt2(String str) {
        char[] chs = str.toCharArray();
        if(str.isEmpty())
            return 0;

        int symbol = 1;
        if(chs[0] == '-'){ //处理负号
            symbol = -1;
            chs[0] = '0'; //这里是字符'0',不是0

        } else if(chs[0] == '+'){ //处理正号
            symbol = 1;
            chs[0] = '0';
        }

        int sum = 0;
        for (char ch : chs) {
            if (ch < '0' || ch > '9') {
                sum = 0;
                break;
            }
            sum = sum * 10 + ch - '0';
        }
        return symbol * sum;
    }
    public static void main(String[] args) {
        System.out.println(StrToInt("+123456789"));
    }
}